home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1994 October / Macformat17.cdr / Shareware City / Developers / shutdown-fx-20-c / sfx control app ƒ / Shell ƒ / about MSG.c next >
Text File  |  1994-07-11  |  7KB  |  252 lines

  1. /**********************************************************************\
  2.  
  3. File:        about MSG.c
  4.  
  5. Purpose:    This module handles displaying the "About MSG" splash
  6.             screen.
  7.  
  8. This program is free software; you can redistribute it and/or modify
  9. it under the terms of the GNU General Public License as published by
  10. the Free Software Foundation; either version 2 of the License, or
  11. (at your option) any later version.
  12.  
  13. This program is distributed in the hope that it will be useful,
  14. but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. GNU General Public License for more details.
  17.  
  18. You should have received a copy of the GNU General Public License
  19. along with this program in a file named "GNU General Public License".
  20. If not, write to the Free Software Foundation, 675 Mass Ave,
  21. Cambridge, MA 02139, USA.
  22.  
  23. \**********************************************************************/
  24.  
  25. #include "about MSG.h"
  26. #include "environment.h"
  27.  
  28. extern Point RawMouse : 0x82C;
  29.  
  30. /*-----------------------------------------------------------------------------------*/
  31. /* internal stuff for about MSG.c                                                    */
  32.  
  33. void SetupTheAboutMSGWindow(WindowDataHandle theData);
  34. void OpenTheMSGWindow(WindowDataHandle theData);
  35. void DrawTheAboutMSGWindow(void);
  36. void DoTheMSGThing(WindowDataHandle theData);
  37. void ActivateTheMSGWindow(void);
  38. void DeactivateTheMSGWindow(WindowDataHandle theData);
  39. void GetTheNextLine(Handle textHandle, unsigned long theSize, unsigned long *pos, Str255 theLine);
  40. void DrawTheAboutString(Str255 theString, short theWidth, short *theRow);
  41. void DrawTheCarpet(void);
  42. void DrawTheString(Str255 theString, short theWidth, short* theRow);
  43. void DrawCarpet(short x, short y, short len);
  44.  
  45. static short        gOldForegroundTime;
  46.  
  47. short AboutMSGBoxDispatch(WindowDataHandle theData, short theMessage, unsigned long misc)
  48. {
  49.     short            theDepth;
  50.     
  51.     switch (theMessage)    /* see graphics.h for list of messages*/
  52.     {
  53.         case kNull:
  54.             if (!gIsInBackground)
  55.                 DoTheMSGThing(theData);
  56.             return kSuccess;
  57.             break;
  58.         case kUpdate:
  59.             DrawTheAboutMSGWindow();
  60.             return kSuccess;
  61.             break;
  62.         case kOpen:
  63.             OpenTheMSGWindow(theData);
  64.             return kSuccess;
  65.         case kActivate:
  66.             ActivateTheMSGWindow();
  67.             return kSuccess;
  68.             break;
  69.         case kDeactivate:
  70.             DeactivateTheMSGWindow(theData);
  71.             return kSuccess;
  72.             break;
  73.         case kKeydown:                            /* close about box on keypress */
  74.         case kMousedown:                        /* or mouseclick */
  75.             CloseTheWindow((ExtendedWindowDataHandle)theData);
  76.             return kSuccess;
  77.             break;
  78.         case kStartup:
  79.             SetupTheAboutMSGWindow(theData);
  80.             return kSuccess;
  81.             break;
  82.     }
  83.     
  84.     return kFailure;        /* for all other messages, defer to default processing */
  85. }
  86.  
  87. void SetupTheAboutMSGWindow(WindowDataHandle theData)
  88. {
  89.     (**theData).windowWidth=243;
  90.     (**theData).windowHeight=243;
  91.     (**theData).windowType=plainDBox;        /* plain rectangle */
  92.     (**theData).windowTitle[0]=0x00;        /* null title, never shown */
  93.     (**theData).hasCloseBox=FALSE;
  94.     (**theData).maxDepth=1;
  95. }
  96.  
  97. void OpenTheMSGWindow(WindowDataHandle theData)
  98. {
  99.     long            dummy;
  100.     
  101.     ShowWindow(GetWindowGrafPtr(theData));
  102.     UpdateTheWindow((ExtendedWindowDataHandle)theData);
  103.     Delay(30, &dummy);
  104. }
  105.  
  106. void ActivateTheMSGWindow(void)
  107. {
  108.     gOldForegroundTime=gForegroundWaitTime;
  109.     gForegroundWaitTime=0;
  110. }
  111.  
  112. void DeactivateTheMSGWindow(WindowDataHandle theData)
  113. {
  114.     UpdateTheWindow((ExtendedWindowDataHandle)theData);
  115.     gForegroundWaitTime=gOldForegroundTime;
  116. }
  117.  
  118. void DoTheMSGThing(WindowDataHandle theData)
  119. {
  120.     Rect            sourceRect, destRect;
  121.     Rect            mainRect;
  122.     long            lr,tb;
  123.     short            l,t;
  124.     short            index;
  125.     
  126.     index=(**theData).windowIndex;
  127.     mainRect=screenBits.bounds;
  128.     if (PtInRect(RawMouse, &mainRect))
  129.     {
  130.         lr=RawMouse.h-mainRect.left;
  131.         lr*=81;
  132.         lr/=mainRect.right-mainRect.left;
  133.         tb=RawMouse.v-mainRect.top;
  134.         tb*=81;
  135.         tb/=mainRect.bottom-mainRect.top;
  136.         if (tb<0)
  137.             tb=0;
  138.         l=RawMouse.h-lr;
  139.         t=RawMouse.v-tb;
  140.         SetRect(&sourceRect, l, t, l+81, t+81);
  141.         SetRect(&destRect, 81, 81, 162, 162);
  142.         SetPort(GetIndWindowGrafPtr(index));
  143.         CopyBits(&(WMgrPort->portBits), &(GetIndWindowGrafPtr(index)->portBits),
  144.             &sourceRect, &destRect, 0, 0L);
  145.     }
  146. }
  147.  
  148. void DrawTheAboutMSGWindow(void)
  149. {
  150.     short            row;
  151.     Rect            sourceRect, destRect;
  152.     GrafPtr            curPort;
  153.     short            theWidth;
  154.     
  155.     GetPort(&curPort);
  156.     EraseRect(&(curPort->portRect));
  157.     theWidth=curPort->portRect.right-curPort->portRect.left;
  158.     
  159.     DrawCarpet(9,234,3);
  160.     SetRect(&sourceRect, 0, 216, 27, 243);
  161.     destRect=sourceRect;
  162.     OffsetRect(&destRect, 27, 0);
  163.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  164.         &sourceRect, &destRect, 0, 0L);
  165.     OffsetRect(&destRect, -27, -27);
  166.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  167.         &sourceRect, &destRect, 0, 0L);
  168.     OffsetRect(&destRect, 0, -27);
  169.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  170.         &sourceRect, &destRect, 0, 0L);
  171.     OffsetRect(&destRect, 27, 0);
  172.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  173.         &sourceRect, &destRect, 0, 0L);
  174.     SetRect(&sourceRect, 0, 162, 27, 243);
  175.     destRect=sourceRect;
  176.     OffsetRect(&destRect, 54, 0);
  177.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  178.         &sourceRect, &destRect, 0, 0L);
  179.     SetRect(&sourceRect, 0, 162, 81, 243);
  180.     destRect=sourceRect;
  181.     OffsetRect(&destRect, 81, 0);
  182.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  183.         &sourceRect, &destRect, 0, 0L);
  184.     OffsetRect(&destRect, -81, -81);
  185.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  186.         &sourceRect, &destRect, 0, 0L);
  187.     OffsetRect(&destRect, 0, -81);
  188.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  189.         &sourceRect, &destRect, 0, 0L);
  190.     OffsetRect(&destRect, 81, 0);
  191.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  192.         &sourceRect, &destRect, 0, 0L);
  193.     SetRect(&sourceRect, 0, 0, 81, 243);
  194.     destRect=sourceRect;
  195.     OffsetRect(&destRect, 162, 0);
  196.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  197.         &sourceRect, &destRect, 0, 0L);
  198.     
  199.     TextFont(geneva);
  200.     TextSize(9);
  201.     TextMode(srcXor);
  202.     row=92;
  203.     DrawTheString("\pMerriMac", theWidth, &row);
  204.     DrawTheString("\pSoftware", theWidth, &row);
  205.     DrawTheString("\pGroup ’94", theWidth, &row);
  206.     DrawTheString("\p", theWidth, &row);
  207.     DrawTheString("\pStill enhancing", theWidth, &row);
  208.     DrawTheString("\pthe flavor of", theWidth, &row);
  209.     DrawTheString("\pyour Macintosh.", theWidth, &row);
  210. }
  211.  
  212. void DrawTheString(Str255 theString, short theWidth, short* theRow)
  213. {
  214.     MoveTo((theWidth-StringWidth(theString))/2, *theRow);
  215.     DrawString(theString);
  216.     *theRow+=11;
  217. }
  218.  
  219. void DrawCarpet(short x, short y, short len)
  220. {
  221.     Rect            box;
  222.     short            iter;
  223.  
  224.     x-=len*2;
  225.     y+=len*2;
  226.     for (iter=0; iter<8; iter++)
  227.     {
  228.         box.left=x-len;
  229.         box.right=x+2*len;
  230.         box.top=y-2*len;
  231.         box.bottom=y+len;
  232.         FillRect(&box, black);
  233.         if (len>1) DrawCarpet(x,y,len/3);
  234.         box.left=x;
  235.         box.right=x+len;
  236.         box.bottom=y;
  237.         box.top=y-len;
  238.         FillRect(&box, white);
  239.         switch (iter)
  240.         {
  241.             case 0:
  242.             case 1: x+=len*3; break;
  243.             case 2:
  244.             case 3: y-=len*3; break;
  245.             case 4:
  246.             case 5: x-=len*3; break;
  247.             case 6:
  248.             case 7: y+=len*3; break;
  249.         }
  250.     }
  251. }
  252.